Ambient occlusion is a technique that computes the amount of light reaching a point on a diffuse surface based on its directly visible occluders. It gives perceptual clues of depth, curvature, and spatial proximity and thus is important for realistic rendering. The concept of ambient occlusion was pioneered by accessibility maps and obscurances.
Ambient occlusion terms can be computed using image-based algorithms. For instance, one prior art implements ambient occlusion on graphics hardware by averaging hard shadows from light sources distributed around the scene, using shadow mapping. This approach typically requires hundreds of point light sources to converge to a smooth solution. In another prior art solution, obscurances with color bleeding are computed based on casting bundles of rays in random directions, which can be implemented on graphics hardware using depth peeling from multiple viewpoints. Hardware-accelerated occlusion queries can also be used to compute ambient occlusion per face or per vertex. Each of these solutions is typically implemented using an “off-line” renderer, where the computations are performed in a non-real-time basis.
In real-time graphics, for static scenes, ambient occlusion terms can be precomputed at the vertices or in light maps. For example, one prior art solution computes bent normals by averaging the direction of the unoccluded rays in the hemisphere. In another prior art solution, ambient occlusion fields render inter-object ambient occlusion, without self-occlusion. In yet another prior art solution, a volumetric approach is taken whereby ambient occlusion values are stored in a 3D grid and linear interpolation is used. All of these techniques mentioned above require scene-dependent precomputation, which is not compatible with maintaining reasonable frame rates for real-time graphics applications with complex scenes.
In a more recent prior art solution, a method for rendering ambient occlusion in screen space is implemented by using a postprocessing pass based on a depth buffer from the eye's point of view. The technique recovers eye-space positions from the depth values in the depth buffer and samples a sphere around the point. Then it compares the depth of the samples with the depth of the point and computes an approximate ambient occlusion term based on the result of these comparisons.
In another prior art solution, solid angles occluded by neighboring pixels in screen space are accumulated based on the pixel eye-space positions and normals stored in an ND-buffer (e.g., normal buffer and depth buffer). The efficiency of this image-space method relies on the fact that neighbor pixels in screen space are likely to come from objects that are close to each other in world space. To capture the occlusion from distant occluders, the occlusion from precomputed spheres is added to the image-space occlusion. To reduce under-occlusion artifacts, the solution requires two ND-buffers: one for the front faces and one for the back faces. This image-based method has over-occlusion issues because all the samples are assumed to be visible from the surface point. Additionally, the requirement for the two ND-buffers increases the cost of a computer system capable of rendering real-time ambient occlusion graphics applications.
Thus, what is required is a solution capable of implementing real-time ambient occlusion graphics rendering while minimizing the visual artifacts and avoiding precomputation of geometric elements. What is further required is a solution that can compute per pixel approximated ambient occlusion as a fixed cost postprocessing pass, which can be combined with an image with minimal intrusion.